[HVM] Save/restore: Allow save/restore of multiple NICs
authorTim Deegan <Tim.Deegan@xensource.com>
Thu, 29 Mar 2007 15:30:01 +0000 (15:30 +0000)
committerTim Deegan <Tim.Deegan@xensource.com>
Thu, 29 Mar 2007 15:30:01 +0000 (15:30 +0000)
Signed-off-by: Tim Deegan <Tim.Deegan@xenource.com>
tools/ioemu/hw/ne2000.c
tools/ioemu/hw/pcnet.c
tools/ioemu/hw/rtl8139.c

index 5fe383fb2ad404999785f4990df59281eaeb9582..78f341372bb4afd054b2405771bcb0afd80e0c4d 100644 (file)
@@ -770,7 +770,7 @@ void isa_ne2000_init(int base, int irq, NICInfo *nd)
              s->macaddr[4],
              s->macaddr[5]);
              
-    register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
+    register_savevm("ne2000", base, 2, ne2000_save, ne2000_load, s);
 }
 
 /***********************************************************/
@@ -806,6 +806,7 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd)
     PCINE2000State *d;
     NE2000State *s;
     uint8_t *pci_conf;
+    int instance;
     
     d = (PCINE2000State *)pci_register_device(bus,
                                               "NE2000", sizeof(PCINE2000State),
@@ -840,8 +841,8 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd)
              s->macaddr[4],
              s->macaddr[5]);
              
-    /* XXX: instance number ? */
-    register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s);
-    register_savevm("ne2000_pci", 0, 1, generic_pci_save, generic_pci_load
-                    &d->dev);
+    instance = pci_bus_num(bus) << 8 | s->pci_dev->devfn;
+    register_savevm("ne2000", instance, 2, ne2000_save, ne2000_load, s);
+    register_savevm("ne2000_pci", instance, 1, generic_pci_save
+                    generic_pci_load, &d->dev);
 }
index b150517bbcb12b08c487b8dd58104f4d37cbb989..6e0b0ed58f232fd5e56148355cab845c013d64e4 100644 (file)
@@ -1783,6 +1783,7 @@ void pci_pcnet_init(PCIBus *bus, NICInfo *nd)
 {
     PCNetState *d;
     uint8_t *pci_conf;
+    int instance;
 
 #if 0
     printf("sizeof(RMD)=%d, sizeof(TMD)=%d\n", 
@@ -1828,9 +1829,10 @@ void pci_pcnet_init(PCIBus *bus, NICInfo *nd)
     d->vc = qemu_new_vlan_client(nd->vlan, pcnet_receive, 
                                  pcnet_can_receive, d);
 
-    register_savevm("pcnet", 0, 1, pcnet_save, pcnet_load, d);
-    register_savevm("pcnet_pci", 0, 1, generic_pci_save, generic_pci_load, 
-                    &d->dev);
+    instance = pci_bus_num(bus) << 8 | d->dev.devfn;
+    register_savevm("pcnet", instance, 1, pcnet_save, pcnet_load, d);
+    register_savevm("pcnet_pci", instance, 1, generic_pci_save,
+                    generic_pci_load, &d->dev);
     
     snprintf(d->vc->info_str, sizeof(d->vc->info_str),
              "pcnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
index e4ba40dfe3268c917e49833d8b791a931e4e622b..3c67507ff4459aa66a998558e4a4592fa7936781 100644 (file)
@@ -3406,6 +3406,7 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd)
     PCIRTL8139State *d;
     RTL8139State *s;
     uint8_t *pci_conf;
+    int instance;
     
     d = (PCIRTL8139State *)pci_register_device(bus,
                                               "RTL8139", sizeof(PCIRTL8139State),
@@ -3460,10 +3461,10 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd)
     s->cplus_txbuffer_len = 0;
     s->cplus_txbuffer_offset = 0;
              
-    /* XXX: instance number ? */
-    register_savevm("rtl8139", 0, 2, rtl8139_save, rtl8139_load, s);
-    register_savevm("rtl8139_pci", 0, 1, generic_pci_save, generic_pci_load
-                    &d->dev);
+    instance = pci_bus_num(bus) << 8 | s->pci_dev->devfn;
+    register_savevm("rtl8139", instance, 2, rtl8139_save, rtl8139_load, s);
+    register_savevm("rtl8139_pci", instance, 1, generic_pci_save
+                    generic_pci_load, &d->dev);
 
 #if RTL8139_ONBOARD_TIMER
     s->timer = qemu_new_timer(vm_clock, rtl8139_timer, s);